#ifndef PDFANNOTATIONTOOLBAR_H
#define PDFANNOTATIONTOOLBAR_H

#include <QToolButton>
#include <QToolBar>
#include <QComboBox>
#include <QSpinBox>
#include <QColor>
#include <QFont>

// ============================================================================
// 颜色选择按钮（支持画笔和画刷颜色）
// ============================================================================
class PDFColorPickerButton : public QToolButton
{
    Q_OBJECT

public:
    enum ColorType {
        StrokeColor,  // 画笔颜色（边框/线条/字体）
        FillColor     // 画刷颜色（填充）
    };

    explicit PDFColorPickerButton(ColorType type, QWidget* parent = nullptr);

    QColor currentColor() const { return m_currentColor; }
    void setCurrentColor(const QColor& color);

signals:
    void colorChanged(const QColor& color);

private slots:
    void onButtonClicked();
    void onPresetColorSelected();
    void onCustomColorSelected();

private:
    void setupMenu();
    void updateButtonIcon();
    QAction* createColorAction(const QColor& color, const QString& name);

    ColorType m_colorType;
    QColor m_currentColor;
    QMenu* m_menu;
};

// ============================================================================
// 线宽选择器
// ============================================================================
class PDFLineWidthSelector : public QComboBox
{
    Q_OBJECT

public:
    explicit PDFLineWidthSelector(QWidget* parent = nullptr);

    qreal currentLineWidth() const;
    void setCurrentLineWidth(qreal width);

signals:
    void lineWidthChanged(qreal width);

private slots:
    void onCurrentIndexChanged(int index);

private:
    void setupItems();
};

// ============================================================================
// 字体选择器
// ============================================================================
class PDFFontComboBox : public QComboBox
{
    Q_OBJECT

public:
    explicit PDFFontComboBox(QWidget* parent = nullptr);

    QString currentFontFamily() const;
    void setCurrentFontFamily(const QString& family);

signals:
    void fontFamilyChanged(const QString& family);
};

// ============================================================================
// 字体大小选择器
// ============================================================================
class PDFFontSizeSpinBox : public QSpinBox
{
    Q_OBJECT

public:
    explicit PDFFontSizeSpinBox(QWidget* parent = nullptr);

signals:
    void fontSizeChanged(int size);
};

// ============================================================================
// 字体样式按钮组
// ============================================================================
class PDFFontStyleButtons : public QWidget
{
    Q_OBJECT

public:
    explicit PDFFontStyleButtons(QWidget* parent = nullptr);

    bool isBold() const { return m_boldButton->isChecked(); }
    bool isItalic() const { return m_italicButton->isChecked(); }
    bool isUnderline() const { return m_underlineButton->isChecked(); }

    void setBold(bool bold);
    void setItalic(bool italic);
    void setUnderline(bool underline);

signals:
    void styleChanged(bool bold, bool italic, bool underline);

private slots:
    void onStyleButtonToggled();

private:
    QToolButton* m_boldButton;
    QToolButton* m_italicButton;
    QToolButton* m_underlineButton;
};

// ============================================================================
// 批注工具栏管理器
// ============================================================================
class PDFAnnotationToolBar : public QObject
{
    Q_OBJECT

public:
    explicit PDFAnnotationToolBar(QToolBar* toolbar, QObject* parent = nullptr);

    // 获取当前设置
    QColor strokeColor() const { return m_strokeColorButton->currentColor(); }
    QColor fillColor() const { return m_fillColorButton->currentColor(); }
    qreal lineWidth() const { return m_lineWidthSelector->currentLineWidth(); }
    QColor textColor() const { return m_textColorButton->currentColor(); }
    QString fontFamily() const { return m_fontComboBox->currentFontFamily(); }
    int fontSize() const { return m_fontSizeSpinBox->value(); }
    bool isBold() const { return m_fontStyleButtons->isBold(); }
    bool isItalic() const { return m_fontStyleButtons->isItalic(); }
    bool isUnderline() const { return m_fontStyleButtons->isUnderline(); }

    // 设置当前值
    void setStrokeColor(const QColor& color);
    void setFillColor(const QColor& color);
    void setLineWidth(qreal width);
    void setTextColor(const QColor& color);
    void setFontFamily(const QString& family);
    void setFontSize(int size);
    void setFontStyle(bool bold, bool italic, bool underline);

signals:
    void strokeColorChanged(const QColor& color);//画笔颜色改变
    void fillColorChanged(const QColor& color);//画刷颜色改变
    void lineWidthChanged(qreal width);//线宽改变
    void textColorChanged(const QColor& color);//字体颜色改变
    void fontFamilyChanged(const QString& family);//字体样式改变
    void fontSizeChanged(int size);//字体大小改变
    void fontStyleChanged(bool bold, bool italic, bool underline);//字体样式

private:
    void setupToolBar(QToolBar* toolbar);
    QWidget* createSeparator();

    PDFColorPickerButton* m_strokeColorButton;
    PDFColorPickerButton* m_fillColorButton;
    PDFLineWidthSelector* m_lineWidthSelector;
    PDFColorPickerButton* m_textColorButton;
    PDFFontComboBox* m_fontComboBox;
    PDFFontSizeSpinBox* m_fontSizeSpinBox;
    PDFFontStyleButtons* m_fontStyleButtons;
};

#endif // PDFANNOTATIONTOOLBAR_H
